/**
 * 	自制JSON解析与转换函数
 * 2012-3-29
 */

(function($) {
	"use strict";
	$.zzJSON = $.zzJSON || {};
	$.extend($.zzJSON, {

				// implement JSON.stringify serialization
				toJSONString : function(obj) {
					var t = typeof(obj);
					if (t != "object" || obj === null) { // simple data type
						if (t == "string")
							obj = '"' + obj + '"';
						return String(obj);

					} else { // recurse array or object
						var n, v, json = [], arr = (obj && obj.constructor == Array);
						for (n in obj) {
							v = obj[n];
							t = typeof(v);
							if (t == "string")
								v = '"' + v + '"';
							else if (t == "object" && v !== null)
								v = JSON.stringify(v);
							json.push((arr ? "" : '"' + n + '":') + String(v));
						}
						return (arr ? "[" : "{") + String(json)
								+ (arr ? "]" : "}");
					}
				},

				parseJSON : function(data) {
					if (typeof data !== "string" || !data) {
						return null;
					}

					// Make sure leading/trailing whitespace is removed (IE
					// can't handle it)
					data = jQuery.trim(data);

					// Attempt to parse using the native JSON parser first
					if (window.JSON && window.JSON.parse) {
						return window.JSON.parse(data);
					}

					// Make sure the incoming data is actual JSON
					// Logic borrowed from http://json.org/json2.js
					if (rvalidchars.test(data.replace(rvalidescape, "@")
							.replace(rvalidtokens, "]").replace(rvalidbraces,
									""))) {

						return (new Function("return " + data))();

					}
					jQuery.error("Invalid JSON: " + data);
				}
			});
})(jQuery);